Este es un R Markdown a modo de ejercicio para aprender su uso. Para su contenido me he basado en los ejercicos realizados sobre ggmap.
library(tidyverse)
library(ggmap)
library(knitr)
library(kableExtra)
require(raster)
require(plotly)
Dibujar un punto en un mapa con nombre
casa_zizur <- data.frame(lon = -1.693952,lat = 42.79191)
mapa <- get_map(casa_zizur, zoom = 16)
mapa2 <- get_map(casa_zizur, zoom = 16, source = "stamen", maptype = "watercolor")
ggmap(mapa) +
geom_point(data = casa_zizur, aes(x = lon, y = lat), size = 3, col = "red3") +
geom_text(data = casa_zizur, aes(x = lon, y = lat), label = "Casa", size = 3)
ggmap(mapa2) +
geom_point(data = casa_zizur, aes(x = lon, y = lat), size = 3, col = "red3") +
geom_text(data = casa_zizur, aes(x = lon, y = lat), label = "Casa", size = 3)
Dibujar en un mapa las terrazas del barrio donde está Kschool. Utilizar la base de datos de las terrazas del csv.
terrazas <- read.csv("data/terrazas.csv")
kschool <- data.frame(lon = -3.705715,lat = 40.43232)
mapa <- get_map(kschool, zoom = 16)
ggmap(mapa) +
geom_point(data = terrazas, aes(x = lon, y = lat),
size = 1.5, alpha = 0.75, col = "orange3")
Mismo ejercicio que antes pero con gasolineras. Utilizar la base de datos de carburantes del csv.
gasolineras <- read.csv("data/carburantes.csv", sep = ";", encoding = "UTF-8", dec = ",")
Voy a ver las provincias con menor precio de media en Gasoleo.A
p <- gasolineras %>%
filter(Precio.Gasoleo.A != "", !is.na(Precio.Gasoleo.A)) %>%
group_by(Provincia) %>%
summarise(avg_precio = mean(Precio.Gasoleo.A)) %>%
mutate(rango = rank(avg_precio)) %>%
arrange(rango)
kable(p, caption = "Precio medio en Gasóleo A") %>%
kable_styling() %>%
scroll_box(width = "100%", height = "200px")
| Provincia | avg_precio | rango |
|---|---|---|
| MELILLA | 0.8590000 | 1 |
| SANTA CRUZ DE TENERIFE | 0.8763886 | 2 |
| PALMAS (LAS) | 0.9175762 | 3 |
| CEUTA | 0.9267778 | 4 |
| NAVARRA | 1.1186222 | 5 |
| HUESCA | 1.1230714 | 6 |
| ZARAGOZA | 1.1324753 | 7 |
| TERUEL | 1.1410526 | 8 |
| LLEIDA | 1.1437582 | 9 |
| VALENCIA / VALÈNCIA | 1.1534288 | 10 |
| MADRID | 1.1550197 | 11 |
| SEGOVIA | 1.1556825 | 12 |
| ÁLAVA | 1.1559273 | 13 |
| BARCELONA | 1.1560732 | 14 |
| CANTABRIA | 1.1565581 | 15 |
| RIOJA (LA) | 1.1567465 | 16 |
| ÁVILA | 1.1572833 | 17 |
| MURCIA | 1.1593473 | 18 |
| CASTELLÓN / CASTELLÓ | 1.1609515 | 19 |
| GIRONA | 1.1621441 | 20 |
| SORIA | 1.1626486 | 21 |
| BURGOS | 1.1627143 | 22 |
| VIZCAYA | 1.1652476 | 23 |
| ZAMORA | 1.1672267 | 24 |
| GRANADA | 1.1672563 | 25 |
| TOLEDO | 1.1675514 | 26 |
| LEÓN | 1.1712653 | 27 |
| GUIPÚZCOA | 1.1714569 | 28 |
| SALAMANCA | 1.1716087 | 29 |
| BADAJOZ | 1.1726560 | 30 |
| TARRAGONA | 1.1728738 | 31 |
| CUENCA | 1.1745408 | 32 |
| ALICANTE | 1.1757895 | 33 |
| ALMERÍA | 1.1758047 | 34 |
| VALLADOLID | 1.1760172 | 35 |
| PALENCIA | 1.1800000 | 36 |
| CÓRDOBA | 1.1814512 | 37 |
| HUELVA | 1.1817431 | 38 |
| SEVILLA | 1.1831622 | 39 |
| ALBACETE | 1.1845735 | 40 |
| CÁDIZ | 1.1864523 | 41 |
| MÁLAGA | 1.1874177 | 42 |
| GUADALAJARA | 1.1890137 | 43 |
| JAÉN | 1.1891098 | 44 |
| CIUDAD REAL | 1.1912716 | 45 |
| CÁCERES | 1.1913739 | 46 |
| ASTURIAS | 1.1951535 | 47 |
| CORUÑA (A) | 1.2001364 | 48 |
| OURENSE | 1.2135393 | 49 |
| LUGO | 1.2138774 | 50 |
| PONTEVEDRA | 1.2146265 | 51 |
| BALEARS (ILLES) | 1.2379006 | 52 |
Voy a dibujar las gasolineras de Madrid teniendo en cuenta solo el Precio.Gasoleo.A
gasolineras_madrid <- gasolineras %>%
filter(Provincia == "MADRID", Precio.Gasoleo.A != "", !is.na(Precio.Gasoleo.A)) %>%
select(lon = Longitud..WGS84., lat = Latitud..WGS84., Precio.Gasoleo.A)
madrid <- data.frame(lon = -3.70379,lat = 40.41678)
mapa <- get_map(madrid)
ggmap(mapa) +
geom_point(data = gasolineras_madrid, aes(x = lon, y = lat, color = Precio.Gasoleo.A),
alpha = 0.8, size = 1.5)
Ahora voy a dibujar las que tengan un precio menor a 1.10
gasolineras_madrid <- gasolineras %>%
filter(Provincia == "MADRID", Precio.Gasoleo.A != "", !is.na(Precio.Gasoleo.A)) %>%
filter(Precio.Gasoleo.A < 1.10) %>%
select(lon = Longitud..WGS84., lat = Latitud..WGS84., Precio.Gasoleo.A)
ggmap(mapa) +
geom_point(data = gasolineras_madrid, aes(x = lon, y = lat),
alpha = 0.8, size = 2)
Dibujar las gasolineras en Madrid: Gasoleos y Gasolinas Que cada tipo de carburante tenga su gráfico Utilizar el color para ver la diferencia de precios
Primero filtro los datos y selecciono las variables que quiero
gasolineras_madrid <- gasolineras %>%
select(lon = Longitud..WGS84., lat = Latitud..WGS84.,
Provincia,
Precio.Gasolina.95.Protección,
Precio.Gasolina..98,
Precio.Gasoleo.A,
Precio.Nuevo.Gasoleo.A) %>%
filter(Provincia == "MADRID", !is.na(Precio.Gasoleo.A),
!is.na(Precio.Nuevo.Gasoleo.A), !is.na(Precio.Gasolina..98),
!is.na(Precio.Gasolina.95.Protección))
Ahora transformo mi DF poniendo los tipos de carburantes en formato fila
gasolineras_madrid <- gather(gasolineras_madrid, carburante, precio, -lon, -lat, -Provincia)
ggmap(mapa) +
geom_point(data = gasolineras_madrid, aes(x = lon, y = lat, color = precio),
size = 1.5, alpha = 0.8) +
ggtitle("Precios Carburantes en Madrid") +
facet_wrap( ~ carburante) +
theme_bw()
Utiliza el conjunto de datos Crime que viene con el paquete ggmap Haz un gráfico en el mapa de Houston solo teniendo en cuenta los asaltos graves Un gráfico por tipo de asalto y un gráfico por día de la semana
houston_crime <- crime %>%
filter(!offense %in% c("aggravated assault", "burglary", "theft"))
houston <- data.frame(lon = -95.3698, lat = 29.76043)
mapa <- get_map(houston, zoom = 14)
ggmap(mapa) +
geom_point(data = houston_crime, aes(x = lon, y =lat),
size = 1, alpha = 0.6, color = "red3") +
facet_wrap( ~ offense)
ggmap(mapa) +
geom_point(data = houston_crime, aes(x = lon, y = lat),
size = 1, alpha = 0.6, color = "red3") +
facet_wrap( ~ day)
Utiliza el conjunto de datos Crime que viene con el paquete ggmap Haz un gráfico en el mapa de Houston solo teniendo en cuenta los asaltos graves Un gráfico por tipo de asalto y un gráfico en formato de densidades
ggmap(mapa) +
stat_density2d(data = houston_crime, aes(x = lon, y = lat, alpha = ..level..),
fill = "red4", size = 2, geom = "polygon") +
facet_wrap( ~ offense)
Utilizando la base de datos del paro del csv: Hacer un gráfico de la tasa del paro según sexo y provincia en un mapa Se debe diferenciar la tasa del paro según el color (solo la península) Coger el primer trimestre del 2011
paro <- read.csv("data/paro.csv", encoding = "UTF-8")
paro_I_2011 <- paro %>%
filter(Año == 2011)
# Cargo el mapa de España y filtro para quedarme la península
shape <- getData("GADM", country= "Spain", level = 2)
peninsula <- subset(shape, !NAME_1 == "Islas Canarias")
# Transformo la variable peninsula en data frame
peninsula.df <- fortify(peninsula, region="CCA_2")
# Ahora hago un merge para unificar las dos base de datos
# Tengo que transformar la columna id porque está guardada como texto
peninsula.df <- peninsula.df %>%
mutate(id = as.numeric(id))
peninsula_paro = inner_join(peninsula.df, paro_I_2011, by = c("id" = "Prov.id"))
ggplot(peninsula_paro) +
aes(x = long, y = lat, group = group, fill = Tasa.paro) +
geom_polygon(colour = "grey80", size = 0.1) +
facet_grid(Sexo ~ Trimestre) +
ggtitle("Tasa del paro 2011 por Trimestre") +
scale_fill_gradient(low = "aliceblue", high = "steelblue4") +
coord_quickmap()